package co.com.coomeva.adminEvaluacion.managedBean;

import java.io.File;
import java.util.Iterator;
import java.util.List;

import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import co.com.coomeva.adminEvaluacion.delegado.DelegadoEdEvaluacion;
import co.com.coomeva.adminEvaluacion.delegado.DelegadoEdPPeriodoEvaluacion;
import co.com.coomeva.adminEvaluacion.modelo.entidades.EdPPeriodoEvaluacion;
import co.com.coomeva.adminEvaluacion.modelo.util.Utils;
import co.com.coomeva.adminEvaluacion.util.FacesUtils;

public class ReporteConsolidadoEvalBean {
	private MensajeBean mensaje = null;
	
	private Long gerenciaCodigo;
	private Long consUnidadNegocioSesion;
	private Long consPeriodo;
	
	private SelectItem[] periodoEvaluacionItems;
	
	private List<EdPPeriodoEvaluacion> listPeriodoEvaluacion = null;
	
	private DelegadoEdPPeriodoEvaluacion delegadoEdPPeriodoevaluacion;
	//private DelegadoEdEvaluacion delegadoEdEvaluacion;
	
	private Boolean verExportar = false;
	private String rutaArchivo;
	private Boolean inactivarConsultar = false;
	
	public ReporteConsolidadoEvalBean() {
		/**************SIMULADO**************/
		//FacesUtils.getSession().setAttribute("gerencia_codigo", "1");
		//FacesUtils.getSession().setAttribute("usuario_red", "prueba3");
		//FacesUtils.getSession().setAttribute("usuario", "objeto");
		/************************************/
		
		delegadoEdPPeriodoevaluacion = DelegadoEdPPeriodoEvaluacion.getInstance();
		//delegadoEdEvaluacion = DelegadoEdEvaluacion.getInstance();
		
		mensaje = (MensajeBean) FacesUtils.getManagedBean("mensajeBean");

		if (FacesUtils.getSession().getAttribute("usuario") == null ||
				FacesUtils.getSession().getAttribute("usuario_red") == null ||
				FacesUtils.getSession().getAttribute("gerencia_codigo") == null) {
			System.out.println("DEBE INICIAR SESION!!!");
			//No ha iniciado sesion!!
			FacesContext facesContext = FacesContext.getCurrentInstance();
			NavigationHandler navigationHandler = facesContext.getApplication().getNavigationHandler();
			navigationHandler.handleNavigation(facesContext, null, "irIngresar");
		} else {
			System.out.println("LA SESION YA LA HA INICIADO!!!");
			
			gerenciaCodigo = new Long((String) FacesUtils.getSession().getAttribute("gerencia_codigo"));
			consUnidadNegocioSesion = (Long) FacesUtils.getSession().getAttribute("unidad_negocio_codigo");
			
			//nombrePeriodo = (String) FacesUtils.getSession().getAttribute("nombre_periodo_activo");
			//consPeriodoActivo = (Long) FacesUtils.getSession().getAttribute("cons_periodo_activo");
			//System.out.println("CONS_PER_SESSION (1): " + consPeriodoActivo);
			
			//consPeriodo = (Long) FacesUtils.getSession().getAttribute("cons_periodo_activo");
			
			//if (consPeriodo == null) {
				//mensaje.mostrarMensaje("Debe existir un periodo activo para la empresa del usuario administrador");
			//}
			
			//usuario = (String) FacesUtils.getSession().getAttribute("usuario_red");
			//mostrarResultado();
		}
	}
	
	public void consultar(ActionEvent event) {
		validador();
		
		try {
			mensaje.setVisible(false);
			//listDatos = null;
			
			delegadoEdPPeriodoevaluacion.generarReporteConsolEval(consPeriodo);
			
			String strNombreArchivo = delegadoEdPPeriodoevaluacion.obtenerNombreArchivo();
			
			if(strNombreArchivo != null && strNombreArchivo.trim().length() > 0) {
				verExportar = true;
				rutaArchivo = FacesUtils.getUrlAplicacion() + "/archivosExportar/" + strNombreArchivo;
				//System.out.println("rutaArchivo = "+rutaArchivo);
				
				mensaje.mostrarMensaje("Reporte generado exitosamente");
			}
		} catch (Exception e) {
			e.printStackTrace();
			verExportar = false;
			mensaje.mostrarMensaje(e.getMessage());
		}
	}
	
	private void validador() {
		
		if (consPeriodo != null  && consPeriodo.equals(new Long("-1")))
			consPeriodo = null;
	}
	
	public void limpiar(ActionEvent event) {
		//Elimina el reporte generado anteriormente...
		String strNombreArchivo = delegadoEdPPeriodoevaluacion.obtenerNombreArchivo();
		if(strNombreArchivo != null && !strNombreArchivo.equals("")){
			Utils util = new Utils();
			String strRuta = util.obtenerRutaFisica();
			
			if (strRuta != null && strRuta.trim().length() > 0) {
				strRuta = strRuta + strNombreArchivo;
				//System.out.println("RUTA CLEA: " + strRuta);
				try {
					File file = new File(strRuta);
					file.delete();
				} catch (Exception e) {
					//e.printStackTrace();
				}
			}
			delegadoEdPPeriodoevaluacion.ajustarNombreArchivo(null);
		}
		
		limpiarcampos();
	    mensaje.ocultarMensaje();
	    //listColaboradorJefe = null;
		//mostrarResultado();
		
	}
	
	public SelectItem[] listarPeriodos() {
    	
    	try {
    		
    		//System.out.println("GERENCIA_CODIGO!!! " + lConsGerencia);
    		
    		//listPeriodoEvaluacion = delegadoEdPPeriodoevaluacion.consultarEdPPeriodoEvaluacion();
    		listPeriodoEvaluacion = delegadoEdPPeriodoevaluacion.consultarPeriodoEval(gerenciaCodigo, null, null, null, null, null, consUnidadNegocioSesion);
    		
    		if (listPeriodoEvaluacion != null && listPeriodoEvaluacion.size() > 0){
    			periodoEvaluacionItems = new SelectItem[listPeriodoEvaluacion.size()+1];
				SelectItem listaItem = new SelectItem();
				listaItem.setLabel("");
				listaItem.setValue(new Integer(-1));
				periodoEvaluacionItems[0]= listaItem;
				int i = 0;
				// Arma el combo con los valores
				for (Iterator<EdPPeriodoEvaluacion> iter = listPeriodoEvaluacion.iterator(); iter.hasNext();) {
					EdPPeriodoEvaluacion objPeriodoEvaluacion = (EdPPeriodoEvaluacion) iter.next();
						if (objPeriodoEvaluacion !=null){
							listaItem = new SelectItem();
							listaItem.setValue(objPeriodoEvaluacion.getConsPeriodo());
							listaItem.setLabel(objPeriodoEvaluacion.getDescripcion());
							periodoEvaluacionItems[i+1] = listaItem;
							i++;
						}
					}
				}
		}catch (Exception e) {
			periodoEvaluacionItems = null;
		}finally{
			listPeriodoEvaluacion = null;
		}
		return periodoEvaluacionItems;
	}
	
	private void limpiarcampos(){
		//Resetea las variables
	    verExportar = false;
	    inactivarConsultar = false;
	}
	
	public List<EdPPeriodoEvaluacion> getListPeriodoEvaluacion() {
		return listPeriodoEvaluacion;
	}

	public void setListPeriodoEvaluacion(List<EdPPeriodoEvaluacion> listPeriodoEvaluacion) {
		this.listPeriodoEvaluacion = listPeriodoEvaluacion;
	}
	
	public Long getConsPeriodo() {
		return consPeriodo;
	}
	
	public void setConsPeriodo(Long consPeriodo) {
		this.consPeriodo = consPeriodo;
	}
	
	public Boolean getVerExportar() {
		return verExportar;
	}

	public void setVerExportar(Boolean verExportar) {
		this.verExportar = verExportar;
	}
	
	public void setPeriodoEvaluacionItems(SelectItem[] periodoEvaluacionItems) {
		this.periodoEvaluacionItems = periodoEvaluacionItems;
	}
	
	public SelectItem[] getPeriodoEvaluacionItems() {
		return listarPeriodos();
	}
	
	public String getRutaArchivo() {
		return rutaArchivo;
	}

	public void setRutaArchivo(String rutaArchivo) {
		this.rutaArchivo = rutaArchivo;
	}
	
	public void setInactivarConsultar(Boolean inactivarConsultar) {
		this.inactivarConsultar = inactivarConsultar;
	}

	public Boolean getInactivarConsultar() {
		return inactivarConsultar;
	}
}
